/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.eventos.bc;

import java.util.List;
import java.util.Vector;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.cip.esymons.eventos.be.Curso;
import org.cip.esymons.eventos.be.Preevento;
import org.cip.esymons.general.be.ConsejoDepartamental;

/**
 *
 * @author Lizardo Rios
 */
@Stateless
public class CursoFacade implements CursoFacadeLocal {
    @PersistenceContext
    private EntityManager em;

    public void create(Curso curso) {
        em.persist(curso);
    }

    public void edit(Curso curso) {
        em.merge(curso);
    }

    public void remove(Curso curso) {
        em.remove(em.merge(curso));
    }

    public Curso find(Object id) {
        return em.find(Curso.class, id);
    }

    public List<Curso> findAll() {
        return em.createQuery("select object(o) from Curso as o").getResultList();
    }

    public Double getNotaMinima(Integer curCodigo) {
        Double nota = 0.0;
        Vector v = new Vector();
        try {
            v = (Vector) em.createNativeQuery("call sp_dameNotaMinima (?);")
                    .setParameter(1, curCodigo)
                    .getResultList();
            if (v != null) {
                System.out.println(" elemento 0 " + v.get(0).toString());
                if (v.size() > 0) {
                    nota = ((Double) (((Vector) (v.elementAt(0))).get(0))).doubleValue();
                }
            }
        } catch (Exception ex) {
            System.out.println("FATAL: " + ex.getMessage());
        }
        return nota;
    }

    public List<CursoAdapter> listarCursos() {
        //try {
            return em.createQuery("select new org.cip.esymons.eventos.bc.CursoAdapter(p.preCodigo, t.tevNombre, p.preNombre, p.prefechaInicio, p.prefechaFin, p.preEstado, c.curNotaMinima) from Curso c join c.preevento p join p.tevCodigo t where c.eveEstado = 1 and p.preActivo = true").getResultList();
        //} catch (Exception e) {
        //    System.out.print("ERROR: " + e.getMessage());
        //    return null;
        //}
    }

    public List<Preevento> listarCursosAMatricular() {
        return em.createQuery("select p from Curso c join c.preevento p join p.tevCodigo t where c.eveEstado = 1 and p.preActivo = true").getResultList();
    }

    public List<Preevento> listarCursosEnProceso() {
        return em.createQuery("select p from Curso c join c.preevento p where c.eveEstado = 1")
                .getResultList();
    }

    public List<Curso> listarVacantes() {
        ConsejoDepartamental cons = (ConsejoDepartamental) em.createQuery("select cd from ConsejoDepartamental cd where cd.cdeEstado = 1 and cd.cdeActivo = true").getSingleResult();
        List<Curso> lista = em.createQuery("select c from Curso c join c.preevento p").getResultList();
        for(int i=0; i<lista.size(); i++) {
            lista.get(i).setConsejo(cons);
        }
        return lista;
    }

}
